🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / node / src / commonMain / kotlin / org / meshtastic / feature / node / domain / usecase / CommonGetNodeDetailsUseCase.kt
Displaying Raw • Download
feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/domain/usecase/CommonGetNodeDetailsUseCase.kt 9613ba91a7e169afe8ce2e98c6d384ef37f03421 (9613ba91) Text, 13.31 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.node.domain.usecase
Tff7b72import T7ee787kotlinx.coroutines.ExperimentalCoroutinesApi
Tff7b72import T7ee787kotlinx.coroutines.flow.Flow
Tff7b72import T7ee787kotlinx.coroutines.flow.combine
Tff7b72import T7ee787kotlinx.coroutines.flow.distinctUntilChanged
Tff7b72import T7ee787kotlinx.coroutines.flow.flatMapLatest
Tff7b72import T7ee787kotlinx.coroutines.flow.map
Tff7b72import T7ee787kotlinx.coroutines.flow.mapLatest
Tff7b72import T7ee787kotlinx.coroutines.flow.onStart
Tff7b72import T7ee787org.koin.core.annotation.Single
Tff7b72import T7ee787org.meshtastic.core.database.entity.FirmwareRelease
Tff7b72import T7ee787org.meshtastic.core.model.DeviceHardware
Tff7b72import T7ee787org.meshtastic.core.model.DeviceLink
Tff7b72import T7ee787org.meshtastic.core.model.MeshLog
Tff7b72import T7ee787org.meshtastic.core.model.MyNodeInfo
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.util.DistanceUnit
Tff7b72import T7ee787org.meshtastic.core.model.util.hasValidEnvironmentMetrics
Tff7b72import T7ee787org.meshtastic.core.model.util.isDirectSignal
Tff7b72import T7ee787org.meshtastic.core.repository.DeviceHardwareRepository
Tff7b72import T7ee787org.meshtastic.core.repository.DeviceLinkRepository
Tff7b72import T7ee787org.meshtastic.core.repository.FirmwareReleaseRepository
Tff7b72import T7ee787org.meshtastic.core.repository.MeshLogRepository
Tff7b72import T7ee787org.meshtastic.core.repository.NodeRepository
Tff7b72import T7ee787org.meshtastic.core.repository.RadioConfigRepository
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.UiText
Tff7b72import T7ee787org.meshtastic.core.resources.fallback_node_name
Tff7b72import T7ee787org.meshtastic.core.ui.util.toPosition
Tff7b72import T7ee787org.meshtastic.feature.node.detail.NodeDetailUiState
Tff7b72import T7ee787org.meshtastic.feature.node.detail.NodeRequestActions
Tff7b72import T7ee787org.meshtastic.feature.node.metrics.EnvironmentMetricsState
Tff7b72import T7ee787org.meshtastic.feature.node.model.LogsType
Tff7b72import T7ee787org.meshtastic.feature.node.model.MetricsState
Tff7b72import T7ee787org.meshtastic.proto.Config.DisplayConfig.DisplayUnits
Tff7b72import T7ee787org.meshtastic.proto.DeviceProfile
Tff7b72import T7ee787org.meshtastic.proto.FirmwareEdition
Tff7b72import T7ee787org.meshtastic.proto.MeshPacket
Tff7b72import T7ee787org.meshtastic.proto.PortNum
Tff7b72import T7ee787org.meshtastic.proto.Telemetry
Tf0883e@SingleTb4b4b4(Te6edf3binds Tff7b72= Tff7b72[Te6edf3GetNodeDetailsUseCaseTff7b72::Te6edf3classTff7b72]Tb4b4b4)
Tff7b72class T56d364CommonGetNodeDetailsUseCase
Tff7b72constructorTb4b4b4(
Tff7b72private Tff7b72val Te6edf3nodeRepositoryTb4b4b4: Te6edf3NodeRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3meshLogRepositoryTb4b4b4: Te6edf3MeshLogRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3radioConfigRepositoryTb4b4b4: Te6edf3RadioConfigRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3deviceHardwareRepositoryTb4b4b4: Te6edf3DeviceHardwareRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3deviceLinkRepositoryTb4b4b4: Te6edf3DeviceLinkRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3firmwareReleaseRepositoryTb4b4b4: Te6edf3FirmwareReleaseRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3nodeRequestActionsTb4b4b4: Te6edf3NodeRequestActionsTb4b4b4,
Tb4b4b4) Tb4b4b4: Te6edf3GetNodeDetailsUseCase Tb4b4b4{
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalCoroutinesApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4)
Tff7b72override Tff7b72operator Tff7b72fun Td2a8ffinvokeTb4b4b4(Te6edf3nodeIdTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Te6edf3FlowTff7b72<Te6edf3NodeDetailUiStateTff7b72> Tff7b72=
Te6edf3nodeRepositoryTb4b4b4.Te6edf3effectiveLogNodeIdTb4b4b4(Te6edf3nodeIdTb4b4b4)Tb4b4b4.Te6edf3flatMapLatest Tb4b4b4{ Te6edf3effectiveNodeId Tff7b72-Tff7b72>
Te6edf3buildFlowTb4b4b4(Te6edf3nodeIdTb4b4b4, Te6edf3effectiveNodeIdTb4b4b4)
Tb4b4b4}
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Td2a8ffbuildFlowTb4b4b4(Te6edf3nodeIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3effectiveNodeIdTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Te6edf3FlowTff7b72<Te6edf3NodeDetailUiStateTff7b72> Tb4b4b4{
Tff7b72val Te6edf3nodeFlow Tff7b72=
Te6edf3nodeRepositoryTb4b4b4.Te6edf3nodeDBbyNumTb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTff7b72[Te6edf3nodeIdTff7b72] Tff7b72?: Te6edf3NodeTb4b4b4.Te6edf3createFallbackTb4b4b4(Te6edf3nodeIdTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) Tb4b4b4}Tb4b4b4.Te6edf3distinctUntilChangedTb4b4b4(Tb4b4b4)
T8b949e// 1. Logs & Metrics Data
Tff7b72val Te6edf3metricsLogsFlow Tff7b72=
Te6edf3combineTb4b4b4(
Te6edf3meshLogRepositoryTb4b4b4.Te6edf3getTelemetryFromTb4b4b4(Te6edf3effectiveNodeIdTb4b4b4)Tb4b4b4.Te6edf3onStart Tb4b4b4{ Te6edf3emitTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3meshLogRepositoryTb4b4b4.Te6edf3getMeshPacketsFromTb4b4b4(Te6edf3effectiveNodeIdTb4b4b4)Tb4b4b4.Te6edf3onStart Tb4b4b4{ Te6edf3emitTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3meshLogRepositoryTb4b4b4.Te6edf3getMeshPacketsFromTb4b4b4(Te6edf3effectiveNodeIdTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3POSITION_APPTb4b4b4.Te6edf3valueTb4b4b4)Tb4b4b4.Te6edf3onStart Tb4b4b4{
Te6edf3emitTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3meshLogRepositoryTb4b4b4.Te6edf3getLogsFromTb4b4b4(Te6edf3effectiveNodeIdTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3PAXCOUNTER_APPTb4b4b4.Te6edf3valueTb4b4b4)Tb4b4b4.Te6edf3onStart Tb4b4b4{
Te6edf3emitTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3meshLogRepositoryTb4b4b4.Te6edf3getLogsFromTb4b4b4(Te6edf3effectiveNodeIdTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3TRACEROUTE_APPTb4b4b4.Te6edf3valueTb4b4b4)Tb4b4b4.Te6edf3onStart Tb4b4b4{
Te6edf3emitTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3meshLogRepositoryTb4b4b4.Te6edf3getLogsFromTb4b4b4(Te6edf3effectiveNodeIdTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3NEIGHBORINFO_APPTb4b4b4.Te6edf3valueTb4b4b4)Tb4b4b4.Te6edf3onStart Tb4b4b4{
Te6edf3emitTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3argsTb4b4b4: Te6edf3ArrayTff7b72<Te6edf3ListTff7b72<Tffa657Any?Tff7b72>Tff7b72> Tff7b72-Tff7b72>
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffUNCHECKED_CASTTa5d6ff"Tb4b4b4)
Te6edf3LogsGroupTb4b4b4(
Te6edf3telemetry Tff7b72= Te6edf3argsTff7b72[T79c0ff0Tff7b72] Tff7b72as Te6edf3ListTff7b72<Te6edf3TelemetryTff7b72>Tb4b4b4,
Te6edf3packets Tff7b72= Te6edf3argsTff7b72[T79c0ff1Tff7b72] Tff7b72as Te6edf3ListTff7b72<Te6edf3MeshPacketTff7b72>Tb4b4b4,
Te6edf3posPackets Tff7b72= Te6edf3argsTff7b72[T79c0ff2Tff7b72] Tff7b72as Te6edf3ListTff7b72<Te6edf3MeshPacketTff7b72>Tb4b4b4,
Te6edf3pax Tff7b72= Te6edf3argsTff7b72[T79c0ff3Tff7b72] Tff7b72as Te6edf3ListTff7b72<Te6edf3MeshLogTff7b72>Tb4b4b4,
Te6edf3trRes Tff7b72= Te6edf3argsTff7b72[T79c0ff4Tff7b72] Tff7b72as Te6edf3ListTff7b72<Te6edf3MeshLogTff7b72>Tb4b4b4,
Te6edf3niRes Tff7b72= Te6edf3argsTff7b72[T79c0ff5Tff7b72] Tff7b72as Te6edf3ListTff7b72<Te6edf3MeshLogTff7b72>Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// 2. Identity & Config
Tff7b72val Te6edf3identityFlow Tff7b72=
Te6edf3combineTb4b4b4(
Te6edf3nodeRepositoryTb4b4b4.Te6edf3ourNodeInfoTb4b4b4,
Te6edf3nodeRepositoryTb4b4b4.Te6edf3myNodeInfoTb4b4b4,
Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3deviceProfileFlowTb4b4b4.Te6edf3onStart Tb4b4b4{ Te6edf3emitTb4b4b4(Te6edf3DeviceProfileTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3ourNodeTb4b4b4, Te6edf3myInfoTb4b4b4, Te6edf3profile Tff7b72-Tff7b72>
Te6edf3IdentityGroupTb4b4b4(Te6edf3ourNodeTb4b4b4, Te6edf3myInfoTb4b4b4, Te6edf3profileTb4b4b4)
Tb4b4b4}
T8b949e// 3. Device Hardware (+ msh.to links) — non-blocking Flow derived from stable (hwModel, pioEnv) key.
Tff7b72val Te6edf3hardwareAndLinksFlowTb4b4b4: Te6edf3FlowTff7b72<Te6edf3PairTff7b72<Te6edf3DeviceHardware?Tb4b4b4, Te6edf3ListTff7b72<Te6edf3DeviceLinkTff7b72>Tff7b72>Tff7b72> Tff7b72=
Te6edf3combineTb4b4b4(Te6edf3nodeFlowTb4b4b4, Te6edf3identityFlowTb4b4b4) Tb4b4b4{ Te6edf3nodeTb4b4b4, Te6edf3identity Tff7b72-Tff7b72>
Tff7b72val Te6edf3isLocal Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3num Tff7b72=Tff7b72= Te6edf3identityTb4b4b4.Te6edf3ourNodeTff7b72?.Te6edf3num
Tff7b72val Te6edf3pioEnv Tff7b72= Tff7b72if Tb4b4b4(Te6edf3isLocalTb4b4b4) Te6edf3identityTb4b4b4.Te6edf3myInfoTff7b72?.Te6edf3pioEnv Tff7b72else Tff7b72null
Te6edf3HardwareKeyTb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3hw_modelTb4b4b4.Te6edf3valueTb4b4b4, Te6edf3pioEnvTb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3distinctUntilChangedTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3flatMapLatest Tb4b4b4{ Te6edf3key Tff7b72-Tff7b72> Te6edf3deviceHardwareRepositoryTb4b4b4.Te6edf3observeDeviceHardwareTb4b4b4(Te6edf3keyTb4b4b4.Te6edf3hwModelTb4b4b4, Te6edf3keyTb4b4b4.Te6edf3targetTb4b4b4) Tb4b4b4}
Tb4b4b4.Te6edf3onStart Tb4b4b4{ Te6edf3emitTb4b4b4(Tff7b72nullTb4b4b4) Tb4b4b4}
Tb4b4b4.Te6edf3mapLatest Tb4b4b4{ Te6edf3hw Tff7b72-Tff7b72>
Tff7b72val Te6edf3links Tff7b72=
Te6edf3hwTff7b72?.Te6edf3platformioTarget
Tff7b72?.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotBlankTb4b4b4(Tb4b4b4) Tb4b4b4}
Tff7b72?.Te6edf3let Tb4b4b4{ Te6edf3deviceLinkRepositoryTb4b4b4.Te6edf3getLinksForTargetTb4b4b4(Tffa657itTb4b4b4) Tb4b4b4} Tff7b72?: Te6edf3emptyListTb4b4b4(Tb4b4b4)
Te6edf3hw Te6edf3to Te6edf3links
Tb4b4b4}
T8b949e// 4. Metadata & Request Timestamps
Tff7b72val Te6edf3metadataFlow Tff7b72=
Te6edf3combineTb4b4b4(
Te6edf3meshLogRepository
Tb4b4b4.Te6edf3getMyNodeInfoTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTff7b72?.Te6edf3firmware_edition Tb4b4b4}
Tb4b4b4.Te6edf3distinctUntilChangedTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3onStart Tb4b4b4{ Te6edf3emitTb4b4b4(Tff7b72nullTb4b4b4) Tb4b4b4}Tb4b4b4,
T8b949e// Placeholders keep the first UI emission from waiting on the firmware cache/refresh pipeline —
T8b949e// real values land via re-emission once the repository produces them.
Te6edf3firmwareReleaseRepositoryTb4b4b4.Te6edf3stableReleaseTb4b4b4.Te6edf3onStart Tb4b4b4{ Te6edf3emitTb4b4b4(Tff7b72nullTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3firmwareReleaseRepositoryTb4b4b4.Te6edf3alphaReleaseTb4b4b4.Te6edf3onStart Tb4b4b4{ Te6edf3emitTb4b4b4(Tff7b72nullTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3nodeRequestActionsTb4b4b4.Te6edf3lastTracerouteTimeTb4b4b4,
Te6edf3nodeRequestActionsTb4b4b4.Te6edf3lastRequestNeighborTimesTb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTff7b72[Te6edf3nodeIdTff7b72] Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3editionTb4b4b4, Te6edf3stableTb4b4b4, Te6edf3alphaTb4b4b4, Te6edf3trTimeTb4b4b4, Te6edf3niTime Tff7b72-Tff7b72>
Te6edf3MetadataGroupTb4b4b4(Te6edf3edition Tff7b72= Te6edf3editionTb4b4b4, Te6edf3stable Tff7b72= Te6edf3stableTb4b4b4, Te6edf3alpha Tff7b72= Te6edf3alphaTb4b4b4, Te6edf3trTime Tff7b72= Te6edf3trTimeTb4b4b4, Te6edf3niTime Tff7b72= Te6edf3niTimeTb4b4b4)
Tb4b4b4}
T8b949e// 5. Requests History (we still query request logs by the target nodeId)
Tff7b72val Te6edf3requestsFlow Tff7b72=
Te6edf3combineTb4b4b4(
Te6edf3meshLogRepositoryTb4b4b4.Te6edf3getRequestLogsTb4b4b4(Te6edf3nodeIdTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3TRACEROUTE_APPTb4b4b4)Tb4b4b4.Te6edf3onStart Tb4b4b4{ Te6edf3emitTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3meshLogRepositoryTb4b4b4.Te6edf3getRequestLogsTb4b4b4(Te6edf3nodeIdTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3NEIGHBORINFO_APPTb4b4b4)Tb4b4b4.Te6edf3onStart Tb4b4b4{ Te6edf3emitTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3trReqsTb4b4b4, Te6edf3niReqs Tff7b72-Tff7b72>
Te6edf3trReqs Te6edf3to Te6edf3niReqs
Tb4b4b4}
T8b949e// Assemble final UI state
Tff7b72return Te6edf3combineTb4b4b4(
Te6edf3nodeFlowTb4b4b4,
Te6edf3metricsLogsFlowTb4b4b4,
Te6edf3identityFlowTb4b4b4,
Te6edf3metadataFlowTb4b4b4,
Te6edf3requestsFlowTb4b4b4,
Te6edf3hardwareAndLinksFlowTb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3argsTb4b4b4: Te6edf3ArrayTff7b72<Tffa657Any?Tff7b72> Tff7b72-Tff7b72>
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffUNCHECKED_CASTTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3node Tff7b72= Te6edf3argsTff7b72[Te6edf3NODE_INDEXTff7b72] Tff7b72as Te6edf3Node
Tff7b72val Te6edf3logs Tff7b72= Te6edf3argsTff7b72[Te6edf3LOGS_INDEXTff7b72] Tff7b72as Te6edf3LogsGroup
Tff7b72val Te6edf3identity Tff7b72= Te6edf3argsTff7b72[Te6edf3IDENTITY_INDEXTff7b72] Tff7b72as Te6edf3IdentityGroup
Tff7b72val Te6edf3metadata Tff7b72= Te6edf3argsTff7b72[Te6edf3METADATA_INDEXTff7b72] Tff7b72as Te6edf3MetadataGroup
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffUNCHECKED_CASTTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3requests Tff7b72= Te6edf3argsTff7b72[Te6edf3REQUESTS_INDEXTff7b72] Tff7b72as Te6edf3PairTff7b72<Te6edf3ListTff7b72<Te6edf3MeshLogTff7b72>Tb4b4b4, Te6edf3ListTff7b72<Te6edf3MeshLogTff7b72>Tff7b72>
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffUNCHECKED_CASTTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3hardwareAndLinks Tff7b72= Te6edf3argsTff7b72[Te6edf3HARDWARE_INDEXTff7b72] Tff7b72as Te6edf3PairTff7b72<Te6edf3DeviceHardware?Tb4b4b4, Te6edf3ListTff7b72<Te6edf3DeviceLinkTff7b72>Tff7b72>
Tff7b72val Tb4b4b4(Te6edf3hwTb4b4b4, Te6edf3deviceLinksTb4b4b4) Tff7b72= Te6edf3hardwareAndLinks
Tff7b72val Tb4b4b4(Te6edf3trReqsTb4b4b4, Te6edf3niReqsTb4b4b4) Tff7b72= Te6edf3requests
Tff7b72val Te6edf3isLocal Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3num Tff7b72=Tff7b72= Te6edf3identityTb4b4b4.Te6edf3ourNodeTff7b72?.Te6edf3num
Tff7b72val Te6edf3pioEnv Tff7b72= Tff7b72if Tb4b4b4(Te6edf3isLocalTb4b4b4) Te6edf3identityTb4b4b4.Te6edf3myInfoTff7b72?.Te6edf3pioEnv Tff7b72else Tff7b72null
Tff7b72val Te6edf3displayUnits Tff7b72= Te6edf3DistanceUnitTb4b4b4.Te6edf3getFromLocaleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3metricsState Tff7b72=
Te6edf3MetricsStateTb4b4b4(
Te6edf3node Tff7b72= Te6edf3nodeTb4b4b4,
Te6edf3isLocal Tff7b72= Te6edf3isLocalTb4b4b4,
Te6edf3deviceHardware Tff7b72= Te6edf3hwTb4b4b4,
Te6edf3deviceLinks Tff7b72= Te6edf3deviceLinksTb4b4b4,
Te6edf3reportedTarget Tff7b72= Te6edf3pioEnvTb4b4b4,
Te6edf3isManaged Tff7b72= Te6edf3identityTb4b4b4.Te6edf3profileTb4b4b4.Te6edf3configTff7b72?.Te6edf3securityTff7b72?.Te6edf3is_managed Tff7b72?: Tff7b72falseTb4b4b4,
Te6edf3isFahrenheit Tff7b72= Te6edf3displayUnits Tff7b72=Tff7b72= Te6edf3DisplayUnitsTb4b4b4.Te6edf3IMPERIALTb4b4b4,
Te6edf3displayUnits Tff7b72= Te6edf3displayUnitsTb4b4b4,
Te6edf3deviceMetrics Tff7b72= Te6edf3logsTb4b4b4.Te6edf3telemetryTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3device_metrics Tff7b72!Tff7b72= Tff7b72null Tb4b4b4}Tb4b4b4,
Te6edf3localStats Tff7b72= Te6edf3logsTb4b4b4.Te6edf3telemetryTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3local_stats Tff7b72!Tff7b72= Tff7b72null Tb4b4b4}Tb4b4b4,
Te6edf3powerMetrics Tff7b72= Te6edf3logsTb4b4b4.Te6edf3telemetryTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3power_metrics Tff7b72!Tff7b72= Tff7b72null Tb4b4b4}Tb4b4b4,
Te6edf3airQualityMetrics Tff7b72= Te6edf3logsTb4b4b4.Te6edf3telemetryTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3air_quality_metrics Tff7b72!Tff7b72= Tff7b72null Tb4b4b4}Tb4b4b4,
Te6edf3hostMetrics Tff7b72= Te6edf3logsTb4b4b4.Te6edf3telemetryTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3host_metrics Tff7b72!Tff7b72= Tff7b72null Tb4b4b4}Tb4b4b4,
Te6edf3signalMetrics Tff7b72= Te6edf3logsTb4b4b4.Te6edf3packetsTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isDirectSignalTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3positionLogs Tff7b72= Te6edf3logsTb4b4b4.Te6edf3posPacketsTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3toPositionTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3paxMetrics Tff7b72= Te6edf3logsTb4b4b4.Te6edf3paxTb4b4b4,
Te6edf3tracerouteRequests Tff7b72= Te6edf3trReqsTb4b4b4,
Te6edf3tracerouteResults Tff7b72= Te6edf3logsTb4b4b4.Te6edf3trResTb4b4b4,
Te6edf3neighborInfoRequests Tff7b72= Te6edf3niReqsTb4b4b4,
Te6edf3neighborInfoResults Tff7b72= Te6edf3logsTb4b4b4.Te6edf3niResTb4b4b4,
Te6edf3firmwareEdition Tff7b72= Te6edf3metadataTb4b4b4.Te6edf3editionTb4b4b4,
Te6edf3latestStableFirmware Tff7b72= Te6edf3metadataTb4b4b4.Te6edf3stable Tff7b72?: Te6edf3FirmwareReleaseTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3latestAlphaFirmware Tff7b72= Te6edf3metadataTb4b4b4.Te6edf3alpha Tff7b72?: Te6edf3FirmwareReleaseTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3environmentState Tff7b72=
Te6edf3EnvironmentMetricsStateTb4b4b4(Te6edf3environmentMetrics Tff7b72= Te6edf3logsTb4b4b4.Te6edf3telemetryTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3hasValidEnvironmentMetricsTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tff7b72val Te6edf3availableLogs Tff7b72= Te6edf3buildSet Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3metricsStateTb4b4b4.Te6edf3hasDeviceMetricsTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3addTb4b4b4(Te6edf3LogsTypeTb4b4b4.Te6edf3DEVICETb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3metricsStateTb4b4b4.Te6edf3hasPositionLogsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3addTb4b4b4(Te6edf3LogsTypeTb4b4b4.Te6edf3POSITIONSTb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3environmentStateTb4b4b4.Te6edf3hasEnvironmentMetricsTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3addTb4b4b4(Te6edf3LogsTypeTb4b4b4.Te6edf3ENVIRONMENTTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3metricsStateTb4b4b4.Te6edf3hasSignalMetricsTb4b4b4(Tb4b4b4) Tff7b72|Tff7b72| Te6edf3metricsStateTb4b4b4.Te6edf3hasLocalStatsTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3addTb4b4b4(Te6edf3LogsTypeTb4b4b4.Te6edf3SIGNALTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3metricsStateTb4b4b4.Te6edf3hasPowerMetricsTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3addTb4b4b4(Te6edf3LogsTypeTb4b4b4.Te6edf3POWERTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3metricsStateTb4b4b4.Te6edf3hasAirQualityMetricsTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3addTb4b4b4(Te6edf3LogsTypeTb4b4b4.Te6edf3AIR_QUALITYTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3metricsStateTb4b4b4.Te6edf3hasTracerouteLogsTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3addTb4b4b4(Te6edf3LogsTypeTb4b4b4.Te6edf3TRACEROUTETb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3metricsStateTb4b4b4.Te6edf3hasNeighborInfoLogsTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3addTb4b4b4(Te6edf3LogsTypeTb4b4b4.Te6edf3NEIGHBOR_INFOTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3metricsStateTb4b4b4.Te6edf3hasHostMetricsTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3addTb4b4b4(Te6edf3LogsTypeTb4b4b4.Te6edf3HOSTTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3metricsStateTb4b4b4.Te6edf3hasPaxMetricsTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3addTb4b4b4(Te6edf3LogsTypeTb4b4b4.Te6edf3PAXTb4b4b4)
Tb4b4b4}
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3nodeName Tff7b72=
Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3long_nameTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotBlankTb4b4b4(Tb4b4b4) Tb4b4b4}Tff7b72?.Te6edf3let Tb4b4b4{ Te6edf3UiTextTb4b4b4.Te6edf3DynamicStringTb4b4b4(Tffa657itTb4b4b4) Tb4b4b4}
Tff7b72?: Te6edf3UiTextTb4b4b4.Te6edf3ResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3fallback_node_nameTb4b4b4, Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3idTb4b4b4.Te6edf3takeLastTb4b4b4(T79c0ff4Tb4b4b4)Tb4b4b4)
Te6edf3NodeDetailUiStateTb4b4b4(
Te6edf3node Tff7b72= Te6edf3nodeTb4b4b4,
Te6edf3nodeName Tff7b72= Te6edf3nodeNameTb4b4b4,
Te6edf3ourNode Tff7b72= Te6edf3identityTb4b4b4.Te6edf3ourNodeTb4b4b4,
Te6edf3metricsState Tff7b72= Te6edf3metricsStateTb4b4b4,
Te6edf3environmentState Tff7b72= Te6edf3environmentStateTb4b4b4,
Te6edf3availableLogs Tff7b72= Te6edf3availableLogsTb4b4b4,
Te6edf3lastTracerouteTime Tff7b72= Te6edf3metadataTb4b4b4.Te6edf3trTimeTb4b4b4,
Te6edf3lastRequestNeighborsTime Tff7b72= Te6edf3metadataTb4b4b4.Te6edf3niTimeTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tff7b72data Tff7b72class T56d364HardwareKeyTb4b4b4(Tff7b72val Te6edf3hwModelTb4b4b4: Tffa657IntTb4b4b4, Tff7b72val Te6edf3targetTb4b4b4: Tffa657String?Tb4b4b4)
Tff7b72private Tff7b72data Tff7b72class T56d364LogsGroupTb4b4b4(
Tff7b72val Te6edf3telemetryTb4b4b4: Te6edf3ListTff7b72<Te6edf3TelemetryTff7b72>Tb4b4b4,
Tff7b72val Te6edf3packetsTb4b4b4: Te6edf3ListTff7b72<Te6edf3MeshPacketTff7b72>Tb4b4b4,
Tff7b72val Te6edf3posPacketsTb4b4b4: Te6edf3ListTff7b72<Te6edf3MeshPacketTff7b72>Tb4b4b4,
Tff7b72val Te6edf3paxTb4b4b4: Te6edf3ListTff7b72<Te6edf3MeshLogTff7b72>Tb4b4b4,
Tff7b72val Te6edf3trResTb4b4b4: Te6edf3ListTff7b72<Te6edf3MeshLogTff7b72>Tb4b4b4,
Tff7b72val Te6edf3niResTb4b4b4: Te6edf3ListTff7b72<Te6edf3MeshLogTff7b72>Tb4b4b4,
Tb4b4b4)
Tff7b72private Tff7b72data Tff7b72class T56d364IdentityGroupTb4b4b4(Tff7b72val Te6edf3ourNodeTb4b4b4: Te6edf3Node?Tb4b4b4, Tff7b72val Te6edf3myInfoTb4b4b4: Te6edf3MyNodeInfo?Tb4b4b4, Tff7b72val Te6edf3profileTb4b4b4: Te6edf3DeviceProfileTb4b4b4)
Tff7b72private Tff7b72data Tff7b72class T56d364MetadataGroupTb4b4b4(
Tff7b72val Te6edf3editionTb4b4b4: Te6edf3FirmwareEdition?Tb4b4b4,
Tff7b72val Te6edf3stableTb4b4b4: Te6edf3FirmwareRelease?Tb4b4b4,
Tff7b72val Te6edf3alphaTb4b4b4: Te6edf3FirmwareRelease?Tb4b4b4,
Tff7b72val Te6edf3trTimeTb4b4b4: Tffa657Long?Tb4b4b4,
Tff7b72val Te6edf3niTimeTb4b4b4: Tffa657Long?Tb4b4b4,
Tb4b4b4)
Tff7b72private Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72const Tff7b72val Te6edf3NODE_INDEX Tff7b72= T79c0ff0
Tff7b72const Tff7b72val Te6edf3LOGS_INDEX Tff7b72= T79c0ff1
Tff7b72const Tff7b72val Te6edf3IDENTITY_INDEX Tff7b72= T79c0ff2
Tff7b72const Tff7b72val Te6edf3METADATA_INDEX Tff7b72= T79c0ff3
Tff7b72const Tff7b72val Te6edf3REQUESTS_INDEX Tff7b72= T79c0ff4
Tff7b72const Tff7b72val Te6edf3HARDWARE_INDEX Tff7b72= T79c0ff5
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.09s